package com.liang.bishi.jd;

import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

/**
 * 9.14京东笔试第三题
 * 题目：最小生成树中最长边【待学】
 * 输入：
 * 3
 * 0 0
 * 0 5
 * 6 0
 * 输出：
 * 3
 */
public class Problem3 {
    public static void main(String[] args) throws IOException {

        Scanner in = new Scanner(System.in);
        int n = Integer.parseInt(in.nextLine());
        int[][] city = new int[n][2];
        for (int i = 0; i < n; i++) {
            String[] s  = in.nextLine().split(" ");
            city[i][0] = Integer.parseInt(s[0]);
            city[i][1] = Integer.parseInt(s[1]);
        }

        int len = n * (n - 1) / 2;
        Node[] edges = new Node[len];

        int k = 0;
        for (int i = 0; i < n; ++i) {
            for (int j = i + 1; j < n; ++j) {
                edges[k++] = new Node(i, j, getDistance(city[i][0], city[i][1], city[j][0], city[j][1]));
            }
        }

        Arrays.sort(edges, (e1, e2) -> {
            double diff = e1.distance - e2.distance;
            if (diff < 0) return -1;
            else if (diff == 0) return 0;
            else return 1;
        });

        UnionFind uf = new UnionFind(n);
        double longEdge = 0;
        for (Node edge : edges) {
            int c1 = edge.c1, c2 = edge.c2;
            double dis = edge.distance;
            if (uf.union(c1, c2)) continue;
            longEdge = Math.max(longEdge, dis);
        }

        System.out.println((int) (longEdge / 2 + 0.5));
    }

    static class Node {
        int c1, c2;
        double distance;

        public Node(int c1, int c2, double distance) {
            this.c1 = c1;
            this.c2 = c2;
            this.distance = distance;
        }
    }

    static class UnionFind {
        public int[] parent;
        public int setCount;
        public int[] count;

        public UnionFind(int n) {
            parent = new int[n];
            for (int i = 0; i < n; ++i) parent[i] = i;
            count = new int[n];
            Arrays.fill(count, 1);
            setCount = n;
        }

        public int find(int x) {
            return parent[x] == x ? parent[x] : (parent[x] = find(parent[x]));
        }

        public boolean union(int x, int y) {
            int pX = find(x);
            int pY = find(y);
            if (pX == pY) return true;
            if (count[pX] > count[pY]) {
                int t = pX;
                pX = pY;
                pY = t;
            }
            count[pY] += count[pX];
            parent[pX] = pY;
            return false;
        }
    }

    static double getDistance(int x1, int y1, int x2, int y2) {
        int deltaX = x1 - x2, deltaY = y1 - y2;
        return Math.sqrt(deltaX * deltaX + deltaY * deltaY);
    }

}
